using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._AviationTools._Airports._HeliportObstructionIdentificationSurfaces
{
    /// <summary>
    /// <para>ICAO Annex 14 Heliports</para>
    /// <para>Generates obstruction identification surfaces (OIS) for heliports based on ICAO Annex 14 Volume II specifications.</para>
    /// <para>根据国际民航组织附件14第二卷规范生成直升机场的障碍物识别面（OIS）。</para>
    /// </summary>    
    [DisplayName("ICAO Annex 14 Heliports")]
    public class ICAOAnnex14Heliports : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ICAOAnnex14Heliports()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_input_safety_area_features">
        /// <para>Input Safety Area Features</para>
        /// <para>The input safety area around which the obstruction identification surfaces will be generated.</para>
        /// <para>将围绕其生成障碍物识别表面的输入安全区域。</para>
        /// </param>
        /// <param name="_target_ois_features">
        /// <para>Target OIS Features</para>
        /// <para>The target feature class that will contain the generated obstruction identification surfaces.</para>
        /// <para>将包含生成的障碍物识别表面的目标要素类。</para>
        /// </param>
        /// <param name="_surface_classification">
        /// <para>Surface Classification</para>
        /// <para><xdoc>
        ///   <para>Specifies the slope design category that will be used for the obstruction identification surfaces.</para>
        ///   <bulletList>
        ///     <bullet_item>Category A—Rotor aircraft operated with performance class 1 will be used.</bullet_item><para/>
        ///     <bullet_item>Category B—Rotor aircraft operated with performance class 3 will be used.</bullet_item><para/>
        ///     <bullet_item>Category C—Rotor aircraft operated with performance class 2 will be used.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将用于障碍物识别曲面的斜坡设计类别。</para>
        ///   <bulletList>
        ///     <bullet_item>A 类 - 将使用性能等级为 1 的旋翼飞机。</bullet_item><para/>
        ///     <bullet_item>B 类 - 将使用性能等级为 3 的旋翼飞机。</bullet_item><para/>
        ///     <bullet_item>C 类 - 将使用性能等级为 2 的旋翼飞机。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        /// <param name="_operation_type">
        /// <para>Operation Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the time when normal flight operations occur.</para>
        ///   <bulletList>
        ///     <bullet_item>Day operation—Normal flight operations occur during the day. This is the default.</bullet_item><para/>
        ///     <bullet_item>Night operation—Normal flight operations occur during the night.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定正常飞行操作发生的时间。</para>
        ///   <bulletList>
        ///     <bullet_item>日间运营 - 白天正常飞行运营。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>夜间运行 - 正常航班运行在夜间进行。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public ICAOAnnex14Heliports(object _input_safety_area_features, object _target_ois_features, _surface_classification_value? _surface_classification, _operation_type_value _operation_type)
        {
            this._input_safety_area_features = _input_safety_area_features;
            this._target_ois_features = _target_ois_features;
            this._surface_classification = _surface_classification;
            this._operation_type = _operation_type;
        }
        public override string ToolboxName => "Aviation Tools";

        public override string ToolName => "ICAO Annex 14 Heliports";

        public override string CallName => "aviation.ICAOAnnex14Heliports";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_input_safety_area_features, _target_ois_features, _surface_classification.GetGPValue(), _operation_type.GetGPValue(), _rotor_diameter, _clearway_length, _surface_shape.GetGPValue(), _approach_bearing, _in_flightpath_features, _heliport_elevation, _custom_json_file, _derived_outfeatureclass];

        /// <summary>
        /// <para>Input Safety Area Features</para>
        /// <para>The input safety area around which the obstruction identification surfaces will be generated.</para>
        /// <para>将围绕其生成障碍物识别表面的输入安全区域。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Safety Area Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _input_safety_area_features { get; set; }


        /// <summary>
        /// <para>Target OIS Features</para>
        /// <para>The target feature class that will contain the generated obstruction identification surfaces.</para>
        /// <para>将包含生成的障碍物识别表面的目标要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target OIS Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_ois_features { get; set; }


        /// <summary>
        /// <para>Surface Classification</para>
        /// <para><xdoc>
        ///   <para>Specifies the slope design category that will be used for the obstruction identification surfaces.</para>
        ///   <bulletList>
        ///     <bullet_item>Category A—Rotor aircraft operated with performance class 1 will be used.</bullet_item><para/>
        ///     <bullet_item>Category B—Rotor aircraft operated with performance class 3 will be used.</bullet_item><para/>
        ///     <bullet_item>Category C—Rotor aircraft operated with performance class 2 will be used.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将用于障碍物识别曲面的斜坡设计类别。</para>
        ///   <bulletList>
        ///     <bullet_item>A 类 - 将使用性能等级为 1 的旋翼飞机。</bullet_item><para/>
        ///     <bullet_item>B 类 - 将使用性能等级为 3 的旋翼飞机。</bullet_item><para/>
        ///     <bullet_item>C 类 - 将使用性能等级为 2 的旋翼飞机。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Surface Classification")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _surface_classification_value? _surface_classification { get; set; }

        public enum _surface_classification_value
        {
            /// <summary>
            /// <para>Category A</para>
            /// <para>Category A—Rotor aircraft operated with performance class 1 will be used.</para>
            /// <para>A 类 - 将使用性能等级为 1 的旋翼飞机。</para>
            /// </summary>
            [Description("Category A")]
            [GPEnumValue("CATEGORY_A")]
            _CATEGORY_A,

            /// <summary>
            /// <para>Category B</para>
            /// <para>Category B—Rotor aircraft operated with performance class 3 will be used.</para>
            /// <para>B 类 - 将使用性能等级为 3 的旋翼飞机。</para>
            /// </summary>
            [Description("Category B")]
            [GPEnumValue("CATEGORY_B")]
            _CATEGORY_B,

            /// <summary>
            /// <para>Category C</para>
            /// <para>Category C—Rotor aircraft operated with performance class 2 will be used.</para>
            /// <para>C 类 - 将使用性能等级为 2 的旋翼飞机。</para>
            /// </summary>
            [Description("Category C")]
            [GPEnumValue("CATEGORY_C")]
            _CATEGORY_C,

        }

        /// <summary>
        /// <para>Operation Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the time when normal flight operations occur.</para>
        ///   <bulletList>
        ///     <bullet_item>Day operation—Normal flight operations occur during the day. This is the default.</bullet_item><para/>
        ///     <bullet_item>Night operation—Normal flight operations occur during the night.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定正常飞行操作发生的时间。</para>
        ///   <bulletList>
        ///     <bullet_item>日间运营 - 白天正常飞行运营。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>夜间运行 - 正常航班运行在夜间进行。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Operation Type")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _operation_type_value _operation_type { get; set; }

        public enum _operation_type_value
        {
            /// <summary>
            /// <para>Day operation</para>
            /// <para>Day operation—Normal flight operations occur during the day. This is the default.</para>
            /// <para>日间运营 - 白天正常飞行运营。这是默认设置。</para>
            /// </summary>
            [Description("Day operation")]
            [GPEnumValue("DAY_OPERATION")]
            _DAY_OPERATION,

            /// <summary>
            /// <para>Night operation</para>
            /// <para>Night operation—Normal flight operations occur during the night.</para>
            /// <para>夜间运行 - 正常航班运行在夜间进行。</para>
            /// </summary>
            [Description("Night operation")]
            [GPEnumValue("NIGHT_OPERATION")]
            _NIGHT_OPERATION,

        }

        /// <summary>
        /// <para>Rotor Diameter</para>
        /// <para>The rotor diameter, in meters, of aircraft using the heliport. The default is 16.5 meters.</para>
        /// <para>使用直升机场的飞机的旋翼直径（以米为单位）。默认值为 16.5 米。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Rotor Diameter")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _rotor_diameter { get; set; } = 16.5;


        /// <summary>
        /// <para>Clearway Length</para>
        /// <para>The length of the clearway. The unit of measurement for the clearway depends on the Input Safety Area Features parameter value.</para>
        /// <para>净空道的长度。净空通道的测量单位取决于输入安全区域要素参数值。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Clearway Length")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _clearway_length { get; set; } = 0;


        /// <summary>
        /// <para>Surface Shape</para>
        /// <para><xdoc>
        ///   <para>Specifies the shape of the take off or approach surface.</para>
        ///   <bulletList>
        ///     <bullet_item>Straight Surface—The take off climb or approach surface is straight. This is the default.</bullet_item><para/>
        ///     <bullet_item>Curved Surface—The take off climb or approach surface is curved.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定起飞或进近曲面的形状。</para>
        ///   <bulletList>
        ///     <bullet_item>直线曲面 （Straight Surface） - 起飞爬升或进近曲面为直线曲面。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>曲面 （Curved Surface） - 起飞、爬升或进近曲面为曲面。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Surface Shape")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _surface_shape_value _surface_shape { get; set; } = _surface_shape_value._STRAIGHT_SURFACE;

        public enum _surface_shape_value
        {
            /// <summary>
            /// <para>Straight Surface</para>
            /// <para>Straight Surface—The take off climb or approach surface is straight. This is the default.</para>
            /// <para>直线曲面 （Straight Surface） - 起飞爬升或进近曲面为直线曲面。这是默认设置。</para>
            /// </summary>
            [Description("Straight Surface")]
            [GPEnumValue("STRAIGHT_SURFACE")]
            _STRAIGHT_SURFACE,

            /// <summary>
            /// <para>Curved Surface</para>
            /// <para>Curved Surface—The take off climb or approach surface is curved.</para>
            /// <para>曲面 （Curved Surface） - 起飞、爬升或进近曲面为曲面。</para>
            /// </summary>
            [Description("Curved Surface")]
            [GPEnumValue("CURVED_SURFACE")]
            _CURVED_SURFACE,

        }

        /// <summary>
        /// <para>Approach Bearing</para>
        /// <para>The absolute bearing that an approaching aircraft will travel along the surface. A value of 0 will align the surface to true north. The default value is 0.</para>
        /// <para>接近的飞机将沿表面行驶的绝对方位。值为 0 会将表面对齐至正北。默认值为 0。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Approach Bearing")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _approach_bearing { get; set; } = 0;


        /// <summary>
        /// <para>Input Flight Path Features</para>
        /// <para>The polyline flight path features that the curved surface will follow.</para>
        /// <para>折线飞行路径特征将遵循曲面。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Flight Path Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _in_flightpath_features { get; set; } = null;


        /// <summary>
        /// <para>Heliport Elevation</para>
        /// <para>The elevation of the highest point of the heliport. The value must be in the vertical coordinate system linear units of the target feature class. If no value is provided, the highest point of the Input Safety Area Features parameter value will be used. The default value is 0.</para>
        /// <para>直升机场最高点的高程。该值必须采用目标要素类的垂直坐标系线性单位。如果未提供任何值，则将使用输入安全区域要素参数值的最高点。默认值为 0。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Heliport Elevation")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _heliport_elevation { get; set; } = 0;


        /// <summary>
        /// <para>Custom JSON File</para>
        /// <para>The import configuration, in JSON format, that creates the custom OIS.</para>
        /// <para>用于创建自定义 OIS 的 JSON 格式的导入配置。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Custom JSON File")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _custom_json_file { get; set; } = null;


        /// <summary>
        /// <para>Output OIS Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output OIS Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _derived_outfeatureclass { get; set; }


        public ICAOAnnex14Heliports SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}